package main

import (
	"context"
	"fmt"
	"time"
)

func main() {
	//WithDeadline 返回父上下文的副本，截止日期调整为不迟于 d。 如果父的截止日期已经早于 d，WithDeadline(parent, d) 在语义上等同于 parent。
	//当截止时间到期、调用返回的取消函数或父上下文的 Done 通道关闭时，返回的上下文的 Done 通道将关闭，以先发生者为准。
	//
	//取消此上下文会释放与其关联的资源，因此一旦此上下文中运行的操作完成，代码应立即调用取消。

	//这里跟withTimeout 功能类似

	ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(time.Microsecond))
	defer cancel()

	select {
	case <-time.After(time.Second):
		fmt.Println("overslept")
	case <-ctx.Done():
		fmt.Println(ctx.Err())
	}

	//context deadline exceeded
}
